# # import numpy as np  # 导入numpy库，并简写为np，用于高效的数值计算
# # import scipy.stats as sts  # 导入scipy库中的stats模块，并简写为sts，用于统计分析
# # import matplotlib as mpl  # 导入matplotlib库，并简写为mpl，这是一个用于数据可视化的库
# # import matplotlib.pyplot as plt  # 从matplotlib库中导入pyplot模块，并简写为plt，提供了类似于MATLAB的绘图系统
# #
# # # 设置Matplotlib的默认参数
# # mpl.rcParams['axes.grid'] = 'True'  # 启用网格线
# # mpl.rcParams['grid.color'] = 'darkgrey'  # 设置网格线的颜色为深灰色
# # mpl.rcParams['lines.linewidth'] = 1  # 设置线条宽度为1
# # mpl.rcParams['axes.prop_cycle'] = mpl.cycler(color=["grey"])  # 设置循环使用的颜色为灰色，但在这个例子中它可能不会影响所有绘图
# #
# # # 生成一个包含100个随机样本的数组，这些样本是从均值为50、标准差为15的正态分布中抽取的。
# # x1 = np.random.normal(50, 15, 100)  # 从均值为50、标准差为15的正态分布中抽取100个随机样本
# #
# # # 最小-最大归一化处理
# # # 每个元素都除以 x1 的取值范围，从而将 x1 中的所有元素都转换到0到1之间。
# # z1 = (x1 - np.min(x1)) / (max(x1) - min(x1))
# #
# # # 创建图形和子图
# # fig = plt.figure()  # 创建一个新的图形
# # plt.subplot(221)  # 激活一个2x2的子图网格中的第一个子图
# # plt.plot(x1)  # 绘制x1的折线图
# # plt.plot(z1)  # 在同一个子图中绘制z1的折线图，这可能会导致z1的线条覆盖x1的线条
# # plt.subplot(222)  # 激活第二个子图
# # plt.hist(x1)  # 绘制x1的直方图
# # plt.subplot(223)  # 激活第三个子图
# # plt.plot(z1)  # 绘制z1的折线图
# # plt.subplot(224)  # 激活第四个子图
# # plt.hist(z1)  # 绘制z1的直方图
# # plt.show()  # 显示图形
# #
# # # 输出x1和z1的统计描述
# # print(sts.describe(x1))
# # print(sts.describe(z1))
# #
# # # 注释掉的代码行用于保存图形到文件，但在这个示例中未执行
# # # fig.savefig('./img/2.4.1-3-Min-max normalization.png',dpi=600)
# import pandas as pd
# import numpy as np
# import matplotlib.pyplot as plt
# from sklearn.datasets import load_iris
# import scipy.stats as sts
#
# # 加载 Iris 数据集并取前五条数据
# iris = load_iris()
# data = np.c_[iris['data'], iris['target']][:5]
# data = data[:, 0]  # 假设取第一个特征列
#
# # 设置 Matplotlib 的默认参数
# plt.rcParams['axes.grid'] = 'True'  # 启用网格线
# plt.rcParams['grid.color'] = 'darkgrey'  # 设置网格线的颜色为深灰色
# plt.rcParams['lines.linewidth'] = 1  # 设置线条宽度为 1
# plt.rcParams['axes.prop_cycle'] = plt.cycler(color=["grey"])  # 设置循环使用的颜色为灰色，但在这个例子中它可能不会影响所有绘图
#
# # 最小-最大归一化处理
# z = (data - np.min(data)) / (np.max(data) - np.min(data))
#
# # 创建图形和子图
# fig = plt.figure()
# plt.subplot(221)
# plt.plot(data)
# plt.plot(z)
# plt.subplot(222)
# plt.hist(data)
# plt.subplot(223)
# plt.plot(z)
# plt.subplot(224)
# plt.hist(z)
# plt.show()
#
# # 输出 data 和 z 的统计描述
# print(sts.describe(data))
# print(sts.describe(z))
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import scipy.stats as stats

# 加载 Iris 数据集
iris = load_iris()
data = iris['data'][:5, 0]  # 取前五行的第一列数据

# 最小-最大归一化处理
z = (data - np.min(data)) / (np.max(data) - np.min(data))

# 设置 Matplotlib 的默认参数
plt.rcParams['axes.grid'] = True  # 启用网格线
plt.rcParams['grid.color'] = 'darkgrey'  # 设置网格线的颜色为深灰色
plt.rcParams['lines.linewidth'] = 1  # 设置线条宽度为 1

# 创建图形和子图
fig, axes = plt.subplots(2, 2, figsize=(10, 6))

# 第一个子图：原始数据和归一化后的数据
axes[0, 0].plot(data, label='Original Data', color='blue')
axes[0, 0].plot(z, label='Normalized Data', color='red')
axes[0, 0].legend()
axes[0, 0].set_title('Original vs Normalized Data')
axes[0, 0].grid(True)

# 第二个子图：原始数据的直方图
axes[0, 1].hist(data, bins=10, color='green', edgecolor='black')
axes[0, 1].set_title('Histogram of Original Data')
axes[0, 1].grid(True)

# 第三个子图：归一化后的数据
axes[1, 0].plot(z, color='red')
axes[1, 0].set_title('Normalized Data')
axes[1, 0].grid(True)

# 第四个子图：归一化后的数据的直方图
axes[1, 1].hist(z, bins=10, color='orange', edgecolor='black')
axes[1, 1].set_title('Histogram of Normalized Data')
axes[1, 1].grid(True)

# 调整子图布局
plt.tight_layout()

# 显示图形
plt.show()

# 输出 data 和 z 的统计描述
print("Statistics for original data:")
print(stats.describe(data))
print("\nStatistics for normalized data:")
print(stats.describe(z))